prehozeni Endianu

Otázka od: Jan Harman

8. 3. 2004 15:22

Zdravim vsechny,
prosim Vas, existuje nejaka funkce na prehozeni bytu v Cardinal (DWord)?
Diky moc.
Honza


Odpovedá: Petr Fejfar

8. 3. 2004 15:46

Jan Harman wrote:

> prosim Vas, existuje nejaka funkce na prehozeni bytu v Cardinal
> (DWord)? Diky moc.


Jeslli nevadi assembler, tak treba takhle:


function ReverseEndian(AValue:dword): dword; assembler;
asm
  xchg al,ah
  rol eax,16
  xchg al,ah
end;


HTH, pf



Odpovedá: Slavomir Skopalik

8. 3. 2004 16:02

Tohle jsem si pred lety napsal


function Swap32(x:integer):integer;assembler; // Convert Big endian to
litle endian
asm // input is in eax
  bswap eax
end; // output is in eax

 Slavek

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Jan Harman
> Sent: Monday, March 08, 2004 3:15 PM
> To: delphi-l@clexpert.cz
> Subject: prehozeni Endianu
>
>
> Zdravim vsechny,
> prosim Vas, existuje nejaka funkce na prehozeni bytu v
> Cardinal (DWord)? Diky moc. Honza
>
>
>
>
>


Odpovedá: petr palicka

8. 3. 2004 16:15

Ahoj,

   jestli hotova nevim, ale resil bych to:

var
   X: DWord;
begin
...
   X:= (X shl 8) OR (X shr 8);
...

peca


Odpovedá: Petr Fejfar

8. 3. 2004 16:22

petr palicka wrote:

> X:= (X shl 8) OR (X shr 8);

Myslis, ze tahle funkce prevrati napr. hodnotu $1020304 na $4030201?
Ja bych takovy optimista nebyl  

pf



Odpovedá: petr palicka

8. 3. 2004 16:23

> Myslis, ze tahle funkce prevrati napr. hodnotu $1020304 na $4030201?
> Ja bych takovy optimista nebyl  

ehm, no, posun ma byt o 16 ne o 8  ,
jinak by to snad mohlo jit

kazdopadne v ASM to bude asi rychlejsi.

Peca


Odpovedá: Petr Fejfar

8. 3. 2004 17:21

petr palicka wrote:

> ehm, no, posun ma byt o 16 ne o 8  ,
> jinak by to snad mohlo jit

To ti jen prohodi Hi/Lo word, ale bajty zustanou v puvodnim poradi,
takze z toho $1020304 bys dostal $3040102. Jeste musis prehodit
bajty uvnitr slov, treba takhle:

        (Swap(word(AValue)) shl 16) or Swap(word(AValue shr 16));


pf